package euler.p051_100;

import euler.MainEuler;
import euler.helper.NaturalHelper;

public class Euler086 extends MainEuler {

    /*
        A spider, S, sits in one corner of a cuboid room,
        measuring 6 by 5 by 3, and a fly, F, sits in the opposite corner.
        By travelling on the surfaces of the room the shortest
        "straight line" distance from S to F is 10 and the path
        is shown on the diagram.

        However, there are up to three "shortest" path candidates
        for any given cuboid and the shortest route is not always integer.

        By considering all cuboid rooms with integer dimensions,
        up to a maximum size of M by M by M, there are exactly 2060
        cuboids for which the shortest distance is integer when M=100,
        and this is the least value of M for which the number of solutions
        first exceeds two thousand; the number of solutions is 1975 when M=99.

        Find the least value of M such that the number of solutions
        first exceeds one million.

     */
    public String resolve() {
        int count = 0;
        int limite = 1000000;
        int M;
        for (M = 1; count < limite; M++) {
            for (int x = M; x <= M; x++) {
                for (int y = 1; y <= M; y++) {
                    for (int z = y; z <= M; z++) {
                        int s = (x > z) ? (x*x + (y+z)*(y+z)) : (z*z + (y+x)*(y+x));

                        if (NaturalHelper.isSquare(s)) {
                            count++;
                        }
                    }
                }
            }
        }

        return String.valueOf(M - 1);
        // 1818
    }

}
